package modele;

import beans.Projet;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.renderer.category.BarRenderer;
import org.jfree.chart.urls.CustomCategoryURLGenerator;
import org.jfree.data.category.IntervalCategoryDataset;
import org.jfree.data.gantt.Task;
import org.jfree.data.gantt.TaskSeries;
import org.jfree.data.gantt.TaskSeriesCollection;
import org.jfree.data.time.SimpleTimePeriod;

/**
 * Classe permettant la création de l'image de la liste des projets
 * @author Amanda & Rami
 */
public class ProjetGantt {

    private JFreeChart modele;

    /**
     * Constructeur prenant en paramètre la liste des projets
     * @param listeProjets Listes des projets à afficher
     */
    public ProjetGantt(ArrayList<Projet> listeProjets) {
        final IntervalCategoryDataset dataset = CreationDataSet(listeProjets);
        modele = CreationModele(dataset,listUrls(listeProjets));
    }

    /**
     * CreationDataSet : Méthode représentant les projets sur le diagramme
     * @param listeProjets Liste des projets à afficher
     * @return liste de barres représentant les projets
     */
    public static IntervalCategoryDataset CreationDataSet(ArrayList<Projet> listeProjets) {
        final TaskSeriesCollection collection = new TaskSeriesCollection();
       
        for (int i = 0; i < listeProjets.size(); i++) {
            TaskSeries s1 = new TaskSeries(("Projet " + i));
            Task t = new Task(listeProjets.get(i).getNom(), new SimpleTimePeriod(listeProjets.get(i).getDateDebut().getTime(), listeProjets.get(i).getDateFin().getTime()));
            s1.add(t);

         collection.add(s1);
        }
       
        return collection;
    }

    /**
     * CreationModele : Méthode de création du modèle graphique
     * @param dataset
     * @return
     */
    private JFreeChart CreationModele(final IntervalCategoryDataset dataset, ArrayList<String> listeUrls) {
        final JFreeChart modeleChart = ChartFactory.createGanttChart(
            "Resultats", // titre du modele
            "Projets", // Nom de l'axe Vertical
            "Date", // Nom de l'axe Horizontal
            dataset, // Collection de barres
            false, // Inclure la légende ?
            false, // tooltips
            true // urls
            );
        CategoryPlot categoryplot = (CategoryPlot)modeleChart.getPlot();
        //categoryplot.setRangePannable(true);
        
          BarRenderer barrenderer = (BarRenderer) categoryplot.getRenderer();


        
            CustomCategoryURLGenerator custom = new CustomCategoryURLGenerator();
             custom.addURLSeries(listeUrls);
            barrenderer.setBaseItemURLGenerator(custom);

        return modeleChart;
    }

    /**
     * listUrls : Méthode de création des URLs pour accéder aux détails
     * @param listeProjets
     * @return listUrl
     */
    private ArrayList<String> listUrls(ArrayList<Projet> listeProjets){
       ArrayList<String> listUrl =  new ArrayList<String>();
       for(int i = 0 ; i<listeProjets.size(); i ++ ){
          
           listUrl.add("Controleur?action=AfficherProjet&id_Projet="+listeProjets.get(i).getIdProjet());
       }
       return listUrl;
   }

    /**
     * Getter / Setter
     * @return Le modèle construit
     */
    public JFreeChart getModele() {
        return this.modele;
    }
}
